home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ilohamail_detect.nasl < prev    next >
Text File  |  2005-03-31  |  5KB  |  142 lines

  1. #
  2. # This script was written by George A. Theall, <theall@tifaware.com>.
  3. #
  4. # See the Nessus Scripts License for details.
  5. #
  6.  
  7.  
  8. # NB: I define the script description here so I can later modify
  9. #     it with the version number and install directory.
  10.   desc["english"] = "
  11. This script detects whether the remote host is running IlohaMail and
  12. extracts version numbers and locations of any instances found. 
  13.  
  14. IlohaMail is a webmail application that is based on a stock build of
  15. PHP and that does not require either a database or a separate IMAP
  16. library.  See <http://www.ilohamail.org/> for more information.";
  17.  
  18.  
  19. if (description) {
  20.   script_id(14629);
  21.   script_version("$Revision: 1.5 $");
  22.  
  23. # script_cve_id("CVE-MAP-NOMATCH");
  24. # NOTE: no CVE id assigned (gat, 01/2005)
  25.  
  26.   name["english"] = "IlohaMail Detection";
  27.   script_name(english:name["english"]);
  28.  
  29.   script_description(english:desc["english"]);
  30.  
  31.   summary["english"] = "Checks for the presence of IlohaMail";
  32.   script_summary(english:summary["english"]);
  33.  
  34.   script_category(ACT_GATHER_INFO);
  35.   script_copyright(english:"This script is Copyright (C) 2004-2005 George A. Theall");
  36.  
  37.   family["english"] = "General";
  38.   script_family(english:family["english"]);
  39.  
  40.   script_dependencie("global_settings.nasl", "http_version.nasl", "no404.nasl");
  41.   script_require_ports("Services/www", 80);
  42.  
  43.   exit(0);
  44. }
  45.  
  46. include("global_settings.inc");
  47. include("http_func.inc");
  48. include("http_keepalive.inc");
  49.  
  50. port = get_http_port(default:80);
  51. if (!get_port_state(port)) exit(0);
  52. if (!can_host_php(port:port)) exit(0);
  53.  
  54. debug_print("looking for IlohaMail on port ", port, ".");
  55.  
  56. # Search for IlohaMail in a couple of different locations.
  57. #
  58. # NB: Directories beyond cgi_dirs() come from a Google search - 
  59. #     'intitle:ilohamail "powered by ilohamail"' - and represent the more
  60. #     popular installation paths currently. Still, cgi_dirs() should 
  61. #     catch the directory if its referenced elsewhere on the target.
  62. dirs = make_list("", "/webmail", "/ilohamail", "/IlohaMail", "/mail", cgi_dirs());
  63. installs = 0;
  64. foreach dir (dirs) {
  65.   # For proper as well as quick & dirty installs.
  66.   foreach src (make_list("", "/source")) {
  67.     url = string(dir, src, "/index.php");
  68.     debug_print("checking ", url, "...");
  69.  
  70.     # Get the page.
  71.     req = http_get(item:url, port:port);
  72.     res = http_keepalive_send_recv(port:port, data:req);
  73.     if (res == NULL) exit(0);           # can't connect
  74.  
  75.     if (!http_40x(port:port, code:res)) {
  76.       # Make sure the page is for IlohaMail.
  77.       if ( egrep(string:res, pattern:"[^/]IlohaMail[^/]", icase:TRUE)) {
  78.         debug_print("res =>>", res, "<<");
  79.  
  80.         # Often the version string is embedded in index.php.
  81.         ver = strstr(res, "<b> Version ");
  82.         if (ver != NULL) {
  83.           ver = ver - "<b> Version ";
  84.           if (strstr(res, "</b>")) ver = ver - strstr(ver, "</b>");
  85.           ver = ereg_replace(string:ver, pattern:"-stable", replace:"", icase:TRUE);
  86.         }
  87.  
  88.         # Handle reporting.
  89.         if (isnull(ver)) {
  90.           # nb: in the event it's unknown, I still want to record the 
  91.           #     fact that there's *some* version installed.
  92.           ver = "*** VERSION UNKNOWN ***";
  93.           if (log_verbosity > 1) display("Can't determine version of IlohaMail installed under ", dir, " on ", host, ":", port, "!\n");
  94.         }
  95.         # Success!
  96.         else {
  97.           debug_print("IlohaMail version =>>", ver, "<<.");
  98.         }
  99.  
  100.         set_kb_item(
  101.           name:string("www/", port, "/ilohamail"),
  102.           value:string(ver, " under ", dir, src)
  103.         );
  104.         installations[string(dir,src)] = ver;
  105.         ++installs;
  106.       }
  107.     }
  108.     # nb: it's either a proper or a quick & dirty install.
  109.     if (installs) break;
  110.   }
  111.  
  112.   # Scan for multiple installations only if "Thorough Tests" is checked.
  113.   if (installs && !thorough_tests) break;
  114. }
  115.  
  116. # Report any instances found unless Report verbosity is "Quiet".
  117. if (installs && report_verbosity > 0) {
  118.   if (installs == 1) {
  119.     foreach dir (keys(installations)) {
  120.       # empty - just need to set 'dir'.
  121.     }
  122.     info = string("IlohaMail ", ver, " was detected on the remote host under the path ", dir, ".");
  123.   }
  124.   else {
  125.     info = string(
  126.       "Multiple instances of IlohaMail were detected on the remote host:\n",
  127.       "\n"
  128.     );
  129.     foreach dir (keys(installations)) {
  130.       info = info + string("    ", installations[dir], ", installed under ", dir, "\n");
  131.     }
  132.     info = chomp(info);
  133.   }
  134.  
  135.   desc = ereg_replace(
  136.     string:desc["english"],
  137.     pattern:"This script[^\.]+\.", 
  138.     replace:info
  139.   );
  140.   security_note(port:port, data:desc);
  141. }
  142.